iOSアプリのタブバーに動的に項目を追加するには
iOS アプリでよく見る画面下部のタブバーは、基本的に固定した項目を並べることが多いです。
タブの項目は5個を超えると右端が「More」になり、その先がリストになります。
今回紹介する Tips はタブの項目を動的に追加する方法です。
上記のオレンジ枠の「History」を追加してみます。
New Project の Tab Bar Application ひな形でプロジェクトを生成します。
MainWindow.xib を下記のように項目を増やしておきます。
次に追加する項目の ViewController である。HistoryViewController クラスを生成します。
New File で Cocoa Touch を選び、UIViewController subclass で生成します。
生成された HistoryViewController.m の initWithNibName:bundle: メソッドをオーバーライドして、
タブバー項目を生成する処理を追加します。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization self.title = @"History"; UITabBarItem *tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemHistory tag:0]; self.tabBarItem = tabBarItem; [tabBarItem release]; } return self; }
アプリケーションデリゲートクラスの application:didFinishLaunchingWithOptions: メソッドで、
タブ項目を追加してみます。tabBarController の viewControllers プロパティにはタブ項目のそれぞれの
コンテンツとなるUIViewController のインスタンスが格納されています。
この配列に HistoryViewController のインスタンスを追加して再びセットします。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. // Add the tab bar controller's current view as a subview of the window NSArray *vc = self.tabBarController.viewControllers; NSMutableArray *nvc = [NSMutableArray arrayWithArray:vc]; HistoryViewController *newVC = [[HistoryViewController alloc] initWithNibName:@"HistoryViewController" bundle:nil]; [nvc addObject:newVC]; [newVC release]; [self.tabBarController setViewControllers:nvc]; self.window.rootViewController = self.tabBarController; [self.window makeKeyAndVisible]; return YES; }
以上の追加処理を条件分岐内に行えば、必要に応じてコンテンツを増やすことができます。